<!DOCTYPE html>
<html lang="zh-CN">

<head>
	<meta charset="UTF-8" />
	<title>树莓派开始玩转Linux</title>
	<link rel="stylesheet" href="../style/css/article.css">
	<!-- <script src="js/a.js"></script> -->
</head>

<body>
<a id="top" href="#"></a>
<div id="particles-js"></div>
<div class="meta">
<h1>Meta</h1>

<ul>
<li> 作者很会讲故事, ...的前世今生, 条理清楚, 结构清晰</li>

</ul>
</div>
<div class="text">
<h1>Text</h1>

<div class="h2i1">
<h2>Part 1 怎样的树莓派</h2>

<div class="h3i1">
<h3>C1 树莓派的诞生</h3>

<ul>
<li>理论高手, 实操小白, 无论是青少年时期的拆卸玩具, 还是现在的动手玩各种系统, 实操才能造就高手</li>

<li>接触计算机的我们, 接触了友好的Windows, 计算机的底层都被隐藏在幕后, 难以有动手实操的机会</li>

<li>树莓派(RaspberryPi), 一块ARM开发板, Linux系统, Python编程</li>

</ul>
</div><div class="h3i2">
<h3>C2 树莓派的心脏</h3>

<ul>
<li>心脏, ARM处理器</li>

<li>ARM的前世今生</li>

<ul>
<li>为了向英国人推个人电脑这个市场, BBC公开招标一款廉价的微型计算机, 艾康电脑公司(Acorn Computer Company)的一台机器中标, 被命名为BBC Micro, 便宜但性能跟不上</li>

<li>为了提升性能, 艾康想在BBC Micro上用Intel处理器, 但太贵, 与廉价的定位不符, 所以艾康开始自行研发处理器, 也就是ARM</li>

</ul>
<li>ARM是"Acorn RISC Machine"的简称, 名字中的"RISC", 指的是ARM处理器对精简指令集的支持</li>

<li>Intel采用的是CISC, Complex, 复杂指令集, 有许多高级指令的封装</li>

<li>ARM采用的是RISC, Reduced, 精简指令集, 提供基础指令, 通过基础指令的组合来实现CISC处理器的功能</li>

<li>RISC</li>

<ul>
<li>缺点, 汇编程序更大(因为指令数量多),  编译时间长</li>

<li>优点, 结构简单, 制造成本低, 运行起来省电(低功耗)</li>

</ul>
<li>iPhone, 安卓, iPad, 皆是ARM处理器</li>

</ul>
</div><div class="h3i3">
<h3>C3 树莓派的大脑</h3>

<ul>
<li>大脑, Linux操作系统</li>

<li>树莓派官方推出的Raspian操作系统, 也是Linux的一个发行版本</li>

<li>Unix</li>

<ul>
<li>计算机的各项活动, 无论是用户交互, 还是编译程序, 都组织成结构相似而在运行上相互独立的"进程". 进程之间可以通过文本形式相互通信, 从而能协同工作</li>

<li>计算机上的数据, 从程序文本, 到配置信息, 再到硬件接口, 都存储成文件</li>

<li>UNIX与其说是一个程序, 倒不如说是一套关于操作系统的哲学. 肯·汤普森就好像计算机世界里的牛顿, 把计算机可以实现的复杂活动分解成几条简单的物理定律</li>

</ul>
<li>Linux的前世今生</li>

<ul>
<li>林纳斯托瓦兹(Linus)采用了GPL协议(General PublicLicense). 任何用户都可以自由地使用并修改GPL协议的代码, 但基于此修改出的代码, 也必须遵照GPL协议开放, 供他人使用或修改</li>

<li>这个行动充满了理想主义的味道, 意味着托瓦兹不能从自己编写的程序获得直接的经济利益</li>

<li>Linux采用了GPL协议, 但托瓦兹并不鼓吹"自由软件就是好"的绝对论断. 在他看来, 无论哪一种力量, 商业也好, 非商业也好, 只要能促进Linux的发展, 就可以为Linux所用. 在遇到问题时, 托瓦兹也不会陷入"完美系统"的洁癖. 他愿意接受一个不甚完美的方案, 然后快速迭代, 不断优化方案</li>

<ul>
<li>这点是我最该学习的地方, 哪有一次就能完美呢, 对完美的奢求是痛苦的根源</li>

</ul>
<li>1995年, 用于HTTP服务的Apache服务器发布. 互联网服务商发现, 可以把同样免费的Linux和Apache服务器结合在一起, 廉价地搭建网站所需的服务器, Linux的崛起势头已经挡不住了</li>

<li>现在Linux已经沉淀为技术世界的基础设施</li>

<li>来自芬兰的穷小子打败了一统天下的比尔·盖茨, 这本来就是话题性十足的故事</li>

</ul>
</ul>
</div></div><div class="h2i2">
<h2>Part 2 使用树莓派</h2>

<div class="h3i4">
<h3>C4 开始使用树莓派</h3>

<ul>
<li>树莓派是一台功能完整的电脑. 现代电脑都采用了冯·诺依曼体系.</li>

<ul>
<li>控制器 + 运算器 = CPU</li>

<li>存储器, 记录数据data, 记录程序program</li>

<li>输入设备, 输出设备</li>

</ul>
<li>开机前, 操作系统程序位于外存中, 和一台计算机没有什么区别, 先在你的电脑上把操作系统镜像文件烧录到外存(SD卡)上</li>

<ul>
<li>Windows下Win32 Disk Imager就很好用</li>

</ul>
<li>官方操作系统Raspbian继承自Debian操作系统. Debian是Linux的一个发行版本</li>

</ul>
</div><div class="h3i5">
<h3>C5 贝壳里的树莓派</h3>

<ul>
<li>lscpu 看CPU信息</li>

<li>free -h 以人习惯读的方式查看内存使用情况</li>

<li>sudo fdisk -l 查看磁盘信息</li>

<li>uname -a 查看操作系统</li>

<li>ifconfig 查看网络接口</li>

<li>which go 查看当前用的程序是用的哪个</li>

<li>alias freak="free -h", 给常用的操作起别名</li>

<li>type + 命令, 了解命令的类型</li>

<ul>
<li>Shell内建函数(built-in)</li>

<li>可执行文件</li>

<li>别名</li>

</ul>
<li>Shell是文本解释器程序的统称, 有很多种Shell, 比如bash(其实就是一个程序/软件)</li>

<ul>
<li>echo $SHELL 查看当前Shell类型</li>

</ul>
<li>选项, 由一个"-"引领一个英文字母, 这称为短选项. 多个短选项的字母可以合在一起, 跟在同一个"-"后面</li>

<ul>
<li>两个--是长选项</li>

</ul>
<li>参数,</li>

<ul>
<li>选项控制行为, 参数提供数据/原料, 思维一下子就通透了</li>

<li>Shell对空格敏感. 当参数信息中包含了空格时, 我们需要用引号把参数包裹起来, 以便Shell能识别出这是一个整体</li>

</ul>
<li>学习一个命令, man, whatis, info都可, 一般用man</li>

</ul>
</div><div class="h3i6">
<h3>C6 好编辑</h3>

<ul>
<li>Linux下一切虚拟成文件, 文件是进行数据存储的唯一形式</li>

<li>这章讲了ls, cp, mv, rm, 还有个编辑器nano, 可跳过</li>

</ul>
</div><div class="h3i7">
<h3>C7 更好的树莓派</h3>

<ul>
<li>软件分发, Debian的机制, apt-get</li>

<ul>
<li>更新, sudo apt-get update</li>

<li>升级, sudo apt-get upgrade</li>

<li>安装, sudo apt-get install mysql</li>

<li>删除, sudo apt-get remove mysql, apt-get remove不会删除配置文件</li>

<li>为了更彻底地删除软件, 可以使用sudo apt-get purge mysql</li>

<li>把镜像服务器改到国内, /etc/apt/sources.list</li>

</ul>
</ul>
</div><div class="h3i8">
<h3>C8 飘洋过海连接你</h3>

<ul>
<li>可以把树莓派作为一个远程服务器, 用ssh连接</li>

<ul>
<li>Mac/Linux下ssh 用户名@ip, 默认22端口</li>

<li>Windows下可以用PuTTY</li>

</ul>
<li>如何变为公网IP, 使得可以通过互联网连接</li>

<ul>
<li>网关NAT端口映射, 许多为了安全不提供</li>

<li>软件, 例如REMOT3.IT, 限制多或者收费</li>

<li>SSH反向隧道, 树莓派向一个中继服务器的某端口建立SSH连接, 形成SSH隧道, 然后其他机器访问中继服务器的该端口, 中继服务器会把内容通过SSH隧道接力给树莓派</li>

</ul>
</ul>
<hr/>

<ul>
<li>文件传输</li>

<li>sftp</li>

<ul>
<li>Mac/Linux下sftp 用户名@ip</li>

<li>进入sftp的模式, $ -> $$</li>

<li>ls查看远端, lls查看本地, cd什么的也同理, 加个l就是本地</li>

<li>get和put传文件, exit退出</li>

</ul>
<li>scp</li>

<ul>
<li>上传, scp localFile user@ip:~/work</li>

<li>下载, scp user@ip:/home/a.txt ./b.txt, 把文件下载下来并重命名</li>

<li>-r选项递归目录</li>

</ul>
</ul>
</div><div class="h3i9">
<h3>C9 时间的故事</h3>

<ul>
<li>NTP是网络时间协议(NetworkTime Protocol)的简称, 主要用于网络时间的同步</li>

<li>NTP服务, 联网就可以自动调整时间, 也有客户端和服务端</li>

<li>sudo service ntp start/stop</li>

<li>date +"%Y %m %d"</li>

</ul>
</div><div class="h3i10">
<h3>C10 规划小能手</h3>

<ul>
<li>cron软件</li>

<li>ps aux | grep cron, 查看cron的守护进程</li>

<li>crontab -e编辑任务</li>

<li>Linux系统的运行级别</li>

<ul>
<li>0关机, 6重启</li>

<li>3多用户正常, 5多用户图形界面</li>

</ul>
<li>对于&&符号连接的两个命令, bash会在第一个命令执行成功后才执行第二个</li>

<ul>
<li>sleep 10 && echo hello, 等10s后才打印</li>

</ul>
</ul>
</div></div><div class="h2i3">
<h2>Part 3 进入Linux</h2>

<div class="h3i11">
<h3>C14 Linux的真身</h3>

<ul>
<li>区分几个概念</li>

<ul>
<li>Linux内核(kernel)</li>

<li>GNU</li>

<li>Linux发行版(Distribution)</li>

</ul>
<li>内核程序时时运行, 应用程序实现某功能, 需要调用</li>

<li>Linux内核的接口是按照POSIX(PortableOperating System Interface)标准制作的</li>

<ul>
<li>Unix也是这个标准, 所以互通方便</li>

<li>FreeBSD是个Unix系统, Mac OS基于它</li>

<li>这实现了内核程序和应用程序的分离, 我写一个Linux的应用程序, 因为遵从了POSIX, 所以在Unix内核下也互通</li>

</ul>
<li>GNU软件, 大量应用程序, 开源免费, 比如gcc, 比如bash</li>

</ul>
<hr/>

<ul>
<li>各大厂商提供Linux发行版, 在有了内核和GNU的基础上做一些其他服务</li>

<li>比如Google的Android操作系统就是个Linux的发行版</li>

<li>红帽家族</li>

<ul>
<li>Red Hat Linux</li>

<li>Red Hat Enterprise, 商用企业版, 面向服务器</li>

<li>Fedora, 由社区维护, 去除了一些商业软件</li>

<li>CentOS是免费版本, 由社区维护, 和红帽完全兼容</li>

</ul>
<li>SUSE家族</li>

<ul>
<li>没怎么听说过</li>

</ul>
<li>Debian家族</li>

<ul>
<li>Debian: 完全免费, 社区维护的Linux版本, 有很大的用户群, 所以遇到问题, 基本都可以找到社区用户的支持</li>

<li>Ubuntu: 由一个基金提供支持的免费Linux版本. 它继承自Debian, 界面友好. 对于初次在PC上安装Linux的用户来说, 这是最适于安装的版本</li>

<li>Mint: 基于Ubuntu. 它提供了更加丰富的预装应用, 以减少用户搜索并安装应用的麻烦. 其使用的应用版本比较新, 可能不是很稳定</li>

<li>Raspbian: 和Ubuntu一样, Raspbian继承自Debian. 它是由树莓派官方推出的发行版, 对树莓派有很好的支持</li>

</ul>
</ul>
</div><div class="h3i12">
<h3>C15 你好, 文件</h3>

<ul>
<li>以树的形式组织文件</li>

<li>硬链接</li>

<ul>
<li>ln file.txt /work/a.txt</li>

<li>修改是同步的</li>

<li>unlink file.txt, 解除硬链接, 和rm功能相同, 链接数为0, 就被删掉了</li>

</ul>
<li>软链接</li>

<ul>
<li>ln -s a.txt /work/b.txt</li>

<li>b.txt就像个快捷方式, 保存着a.txt的路径</li>

</ul>
<li>文件搜索</li>

<ul>
<li>find / -name "*.c", 在根目录下搜索</li>

</ul>
</ul>
</div><div class="h3i13">
<h3>C16 从程序到进程</h3>

<ul>
<li>浅谈了一下指令, 机器语言, 汇编语言, 高级语言</li>

<li>高级语言源代码 -> 编译 -> 程序(静态), 运行时才是进程</li>

<li>ps命令查看进程</li>

</ul>
</div><div class="h3i14">
<h3>C17 万物皆是文本流</h3>

<ul>
<li>在Linux的设计哲学中, 一向有"万物皆是文件(Everything is a file)"的说法</li>

<li>由于文件总和数据存储联系在一起, 因此托瓦兹把"万物皆文件"的说法改为"万物皆是文本流(Everything is a stream of bytes)"</li>

<li>文本流存在于Linux的每一个进程中. 当Linux启动一个进程时, 会自动打开三个流的端口: 标准输入(Standard Input), 标准输出(StandardOutput)和标准错误(Standard Error), 这三个端口类似于入口, 出口, 紧急出口</li>

<li>重定向, >, >></li>

<li>重新定向是把一个进程的标准输出写入文件. 管道(pipe)也是变更文本流的方向. 不过, 管道的目的地是另一个进程</li>

		</ul>
</div></div>	</div>
<script src="../style/js/particles.min.js"></script>
<script src="../style/js/particles.config.js"></script>
</body>
</html>
